package moduloRemoto.pojo;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.validator.NotNull;

@Entity
@Table(name="Atividade")
public class Atividade implements Serializable
{
	@Transient
	private static final long serialVersionUID = 1L;

	@EmbeddedId
	@AttributeOverrides({
			@AttributeOverride(name = "idTar", column = @Column(name = "idTar", nullable = false)),
			@AttributeOverride(name = "idCol", column = @Column(name = "idCol", nullable = false))})
	@NotNull
	private AtividadePK primaryKey = new AtividadePK();
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idCol", nullable = false, insertable = false, updatable = false)
	@NotNull
	private Colaborador colaborador = new Colaborador();
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "idTar", nullable = false, insertable = false, updatable = false)
	@NotNull
	private Tarefa tarefa = new Tarefa();
	
	@Column(nullable=true, columnDefinition="VARCHAR(180)")
	private String tituloAti;
	
	@Column(nullable=true, columnDefinition="VARCHAR(40)")
	private String statusAti;
	
	@Column(nullable=true, columnDefinition="INT(3)")
	private int percentConcluAti;
	
	@Column(nullable=true, columnDefinition="DECIMAL(6,3)")
	private double horasTrabalhadasAti;
	
	@Column(nullable=true, columnDefinition="VARCHAR(255)")
	private String descricaoAti;
	
	@Column(nullable=true, columnDefinition="DATE")
	@Temporal(value = TemporalType.DATE)
	private Date dataInicialAti;
	
	@Column(nullable=true, columnDefinition="DATE")
	@Temporal(value = TemporalType.DATE)
	private Date dataConclusaoAti;


	// Construtor
	public Atividade()
	{
	}
	
	public Atividade(Tarefa tarefa, Colaborador colaborador)
	{
		this.primaryKey = new AtividadePK(-1, tarefa.getIdTar(), colaborador.getIdCol());
		this.colaborador = colaborador;
		this.tarefa = tarefa;
	}


	// Getters and Setters	
	public final AtividadePK getPrimaryKey()
	{
		return primaryKey;
	}

	public final void setPrimaryKey(AtividadePK primaryKey)
	{
		this.primaryKey = primaryKey;
	}

	public final Colaborador getColaborador()
	{
		return colaborador;
	}

	public final void setColaborador(Colaborador colaborador)
	{
		this.colaborador = colaborador;
	}

	public final Tarefa getTarefa()
	{
		return tarefa;
	}

	public final void setTarefa(Tarefa tarefa)
	{
		this.tarefa = tarefa;
	}

	public final String getTituloAti()
	{
		return tituloAti;
	}

	public final void setTituloAti(String tituloAti)
	{
		this.tituloAti = tituloAti;
	}

	public final String getStatusAti()
	{
		return statusAti;
	}

	public final void setStatusAti(String statusAti)
	{
		this.statusAti = statusAti;
	}

	public final int getPercentConcluAti()
	{
		return percentConcluAti;
	}

	public final void setPercentConcluAti(int percentConcluAti)
	{
		this.percentConcluAti = percentConcluAti;
	}

	public final double getHorasTrabalhadasAti()
	{
		return horasTrabalhadasAti;
	}

	public final void setHorasTrabalhadasAti(double horasTrabalhadasAti)
	{
		this.horasTrabalhadasAti = horasTrabalhadasAti;
	}

	public final String getDescricaoAti()
	{
		return descricaoAti;
	}

	public final void setDescricaoAti(String descricaoAti)
	{
		this.descricaoAti = descricaoAti;
	}

	public Date getDataInicialAti() {
		return dataInicialAti;
	}

	public void setDataInicialAti(Date dataInicialAti) {
		this.dataInicialAti = dataInicialAti;
	}

	public Date getDataConclusaoAti() {
		return dataConclusaoAti;
	}

	public void setDataConclusaoAti(Date dataConclusaoAti) {
		this.dataConclusaoAti = dataConclusaoAti;
	}	
}